#if 0
#include "user.h"

typedef struct
{
	MyCBFun_t CB;
	uint32_t LineSn;
	uint16_t Time[8];
	uint8_t Cnt;
	uint8_t Busy;
}FRQ_DetectCtrlStruct;
FRQ_DetectCtrlStruct FRQDetCtrl;
#define FRQ_DET_TIM	TIM7
#define FRQ_TIM_IRQ	TIM7_IRQn
#define FRQDET_DEBUG	DBG
void FRQ_ExtiIrqCB(PV_Union Param)
{
	MyCBFun_t CB;
	if (FRQDetCtrl.CB)
	{
		if (FRQDetCtrl.Cnt)
		{
			FRQDetCtrl.Time[FRQDetCtrl.Cnt - 1] = LL_TIM_GetCounter(FRQ_DET_TIM);
			FRQDET_DEBUG("%d %d", FRQDetCtrl.Cnt, FRQDetCtrl.Time[FRQDetCtrl.Cnt - 1]);
			FRQDetCtrl.Cnt++;
			LL_TIM_SetCounter(FRQ_DET_TIM, 0);
			if (FRQDetCtrl.Cnt > 8)
			{
				CB = FRQDetCtrl.CB;
				FRQ_UartDetectStop();
				Param.pu16 = FRQDetCtrl.Time;
				CB(Param);
			}
		}
		else
		{
			LL_TIM_EnableCounter(FRQ_DET_TIM);
			LL_TIM_SetCounter(FRQ_DET_TIM, 0);
			LL_TIM_EnableIT_UPDATE(FRQ_DET_TIM);
			FRQDetCtrl.Cnt++;
		}
	}
	else
	{
		FRQ_UartDetectStop();
	}
}

void FRQ_UartDetectStart(GPIO_TypeDef *Port, uint32_t PinSn, MyCBFun_t CB)
{
	PV_Union Param;
	LL_TIM_InitTypeDef TIM_InitStruct;
	if (!CB)
		return ;
	if (FRQDetCtrl.Busy)
	{
		Param.u32 = 0;
		CB(Param);
		return ;
	}
	EXTI_Register(Port, PinSn, GPIO_MODE_IT_RISING_FALLING, GPIO_NOPULL, FRQ_ExtiIrqCB, (void *)PinSn);
	FRQDetCtrl.CB = CB;
	FRQDetCtrl.Cnt = 0;
	FRQDetCtrl.Busy = 1;
	FRQDetCtrl.LineSn = PinSn;
	memset(FRQDetCtrl.Time, 0, sizeof(FRQDetCtrl.Time));
	LL_TIM_StructInit(&TIM_InitStruct);
	LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM7);
	LL_TIM_DisableCounter(FRQ_DET_TIM);
	LL_TIM_Init(FRQ_DET_TIM, &TIM_InitStruct);
	EXTI_OnOff(FRQDetCtrl.LineSn, 1);
	HAL_NVIC_SetPriority(FRQ_TIM_IRQ, IRQ_MOST_LOW_LEVEL, 0);
	NVIC_EnableIRQ(FRQ_TIM_IRQ);
}
void FRQ_UartDetectStop(void)
{
	LL_TIM_DisableIT_UPDATE(FRQ_DET_TIM);
	LL_TIM_DisableCounter(FRQ_DET_TIM);
	EXTI_OnOff(FRQDetCtrl.LineSn, 0);
	FRQDetCtrl.CB = NULL;
	FRQDetCtrl.Busy = 0;
}

void TIM7_IRQHandler(void)
{
	MyCBFun_t CB;
	PV_Union Param;
	FRQDET_DEBUG("!!!!!");
	if (FRQDetCtrl.CB)
	{
		CB = FRQDetCtrl.CB;
		FRQ_UartDetectStop();
		Param.pu16 = FRQDetCtrl.Time;
		CB(Param);
	}
	else
	{
		FRQ_UartDetectStop();
	}
}
#endif
